package service;

import model.KeyValue;
import model.Collection;

import java.util.List;
import java.util.Map;

/**
 * 数据库服务接口
 * 定义基本的CRUD操作
 */
public interface DatabaseService {
    
    /**
     * 存储键值对
     */
    <T> boolean put(String key, T value);
    
    /**
     * 获取值
     */
    <T> T get(String key, Class<T> clazz);
    
    /**
     * 更新值
     */
    <T> boolean update(String key, T value);
    
    /**
     * 删除键值对
     */
    boolean delete(String key);
    
    /**
     * 检查键是否存在
     */
    boolean containsKey(String key);
    
    /**
     * 获取所有键
     */
    List<String> getAllKeys();
    
    /**
     * 获取所有键值对
     */
    <T> List<KeyValue<T>> getAllKeyValues(Class<T> clazz);
    
    /**
     * 批量插入
     */
    <T> boolean batchPut(Map<String, T> keyValueMap);
    
    /**
     * 批量更新
     */
    <T> boolean batchUpdate(Map<String, T> keyValueMap);
    
    /**
     * 批量删除
     */
    boolean batchDelete(List<String> keys);
    
    /**
     * 创建集合
     */
    boolean createCollection(String name, String description);
    
    /**
     * 删除集合
     */
    boolean deleteCollection(String name);
    
    /**
     * 获取集合
     */
    Collection getCollection(String name);
    
    /**
     * 获取所有集合
     */
    List<Collection> getAllCollections();
    
    /**
     * 在集合中存储数据
     */
    <T> boolean putInCollection(String collectionName, String key, T value);
    
    /**
     * 从集合中获取数据
     */
    <T> T getFromCollection(String collectionName, String key, Class<T> clazz);
    
    /**
     * 从集合中删除数据
     */
    boolean deleteFromCollection(String collectionName, String key);
    
    /**
     * 获取集合中的所有数据
     */
    <T> List<KeyValue<T>> getAllFromCollection(String collectionName, Class<T> clazz);
    
    /**
     * 清空数据库
     */
    void clear();
    
    /**
     * 获取数据库统计信息
     */
    Map<String, Object> getStatistics();
    
    /**
     * 返回KeyValue对象本身，便于获取元数据
     */
    model.KeyValue<?> getWithType(String key);
} 